﻿#pragma once

#include "pipelinebase.h"
#include  "fuzhou_data.h"
#include "systemjournal.h"


class WCSSend;
class StackPlate;
class Boxline;

class PipelineStack : public PipelineBase
{
public:
	PipelineStack();
	~PipelineStack();
	bool Init();
	virtual int IfTaskAvailable(const QByteArray& task) override;
	/****************************************************************************
	 * 功能: 任务初始化操作，由项目具体实现
	 * 返回值: true：执行成功，业务线切换到任务初始化完成状态
	 ****************************************************************************/
	virtual bool TaskInit() override;
	/****************************************************************************
	 * 功能: 判断任务启动条件是否具备
	 * 返回值:true：任务可以启动，业务线切换到任务开始状态
	 ****************************************************************************/
	virtual bool IfTaskStarted() override;

	/****************************************************************************
	 * 功能: 判断任务是否准备完成
	 * 返回值: true: 任务已经准备完成，直接进入任务等待状态
	 ****************************************************************************/
	virtual bool IfTaskPrepared() override;

	/****************************************************************************
	 * 功能: 用于生成新节拍
	 * 返回值: 0：节拍生成成功，业务线切换到节拍准备完成状态，1：生成条件不足， -1：生成失败
	 ****************************************************************************/
	virtual int StepPrepare() override;

	/****************************************************************************
	 * 功能: 任务完成处理操作， 任务完成状态时被调用
	 * 返回值: true 表示成功
	 ****************************************************************************/
	virtual bool TaskFinish() override;

	/*路径执行前操作*/
	virtual bool PathStart(const QString& path) override;
	virtual bool SendNotifyer(int type) override;
	/*路径执行后特殊操作*/
	virtual bool PathEnd(const QString& path) override;

private:
	bool CheckTaskData(const TaskDataJ& data);
	bool ApplySku(int num);
	/*计算下一次的抓取数量*/
	int CalculateNextGrab();


	bool InitPrepareStep(int id);

private:
	int m_stepId = 0;
	WCSSend* m_wcs = nullptr;
	Boxline* m_line = nullptr;
	StackPlate* m_plate = nullptr;
};
